import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 千吨转换测试类
 * 验证当重量 >= 1000吨时转换为千吨的效果
 */
public class KilotonConversionTest {
    
    public static void main(String[] args) {
        System.out.println("=== 千吨转换测试 ===");
        
        // 测试各种重量值的显示格式
        testWeightDisplayFormat();
    }
    
    /**
     * 测试重量显示格式
     */
    private static void testWeightDisplayFormat() {
        System.out.println("\n--- 重量显示格式测试 ---");
        
        // 小于1000吨的情况
        testWeight("0", "0.00吨");
        testWeight("0.5", "0.50吨");
        testWeight("1", "1.00吨");
        testWeight("10.5", "10.50吨");
        testWeight("100", "100.00吨");
        testWeight("999", "999.00吨");
        testWeight("999.99", "999.99吨");
        
        System.out.println();
        
        // 大于等于1000吨的情况（转换为千吨）
        testWeight("1000", "1.00千吨");
        testWeight("1500", "1.50千吨");
        testWeight("2000", "2.00千吨");
        testWeight("2500.5", "2.50千吨");
        testWeight("10000", "10.00千吨");
        testWeight("12345", "12.35千吨");
        testWeight("100000", "100.00千吨");
        testWeight("1000000", "1000.00千吨");
        
        System.out.println();
        
        // 边界情况测试
        testWeight("999.994", "999.99吨");  // 四舍五入后仍小于1000
        testWeight("999.995", "1000.00吨"); // 四舍五入后等于1000，但显示为吨
        testWeight("999.996", "1000.00吨"); // 四舍五入后等于1000，但显示为吨
        testWeight("1000.004", "1.00千吨"); // 四舍五入后为1000，显示为千吨
        testWeight("1000.005", "1.00千吨"); // 四舍五入后为1000，显示为千吨
    }
    
    /**
     * 测试单个重量值的格式化
     */
    private static void testWeight(String weightStr, String expected) {
        BigDecimal weight = new BigDecimal(weightStr);
        String result = formatWeightDisplay(weight);
        String status = result.equals(expected) ? "✓" : "✗";
        System.out.println(status + " " + weightStr + "吨 -> " + result + " (期望: " + expected + ")");
    }
    
    /**
     * 格式化重量显示（吨 -> 千吨）
     * 当重量 >= 1000吨时，转换为千吨显示
     * @param weightInTons 重量（吨）
     * @return 格式化后的重量字符串
     */
    private static String formatWeightDisplay(BigDecimal weightInTons) {
        if (weightInTons == null) {
            return "0.00吨";
        }
        
        // 保留2位小数
        BigDecimal formattedWeight = weightInTons.setScale(2, RoundingMode.HALF_UP);
        
        // 如果大于等于1000吨，转换为千吨
        if (formattedWeight.compareTo(new BigDecimal("1000")) >= 0) {
            BigDecimal weightInKiloTons = formattedWeight.divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP);
            return weightInKiloTons.toString() + "千吨";
        } else {
            return formattedWeight.toString() + "吨";
        }
    }
}
